<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // es6新增了哪些内容？
    // es6是什么？  js的规范 一个标准 因为6的版本相对于之前，发生了翻天覆地的变化

    // 1.let const 
    // 2.解构赋值
    // 3.模版字符串
    // 4.箭头函数
    // 5.promise
    // 6.async await
    // 7.Class 类 继承
    // 8.es6新增的数据结构 Set Map
    // 9.Symbol()
    // 10.模块化的导入导出  import 
//    11. 扩展运算符


    // let const var 区别

    // var a = 10
    // console.log(window);//用var声明的变量会挂载到window，  let const 不会挂载window
    // let b = 20
    // console.log(window);//

//    console.log(b);
//     var b = 20  //   用var声明的变量有变量提升，提升的是变量名，而不是赋值

// console.log(b);
// console.log(c);
// let b =20
// const c = 30    let const 没有变量提升


// es6之后有了块级作用域的概念   {}  属性块级作用域


// if(true){
//    let a = 10
// }
// console.log(a);//报错  {} 就是一个作用域，在外部没有办法访问内部

// for(let i = 0;i<5;i++){
//     setTimeout(()=>{
//       console.log(i);
//     },0)
// }
// if(true){
//     const a = 10
// }
// console.log(a);   
// 总结  var 有全局作用域  let const 有块级作用域


// const a = 10
// a =20
// console.log(a);//const 声明的是常量 ，常量不允许修改


// let a = 10
// a =20
// console.log(a);//const 声明的是常量 ，常量不允许修改


// let  var 声明的是变量  const声明的是常量

// const obj ={
//     name:'zs'
// }

// obj.name = 'lisi'
// console.log(obj);
// const 声明对象的时候，可以修改对象内部的值



// 暂时性死区？？？
// let a = 20
// if(true){
//    console.log(a);
//    let a = 30
// }
// 因为 let 没有变量提升，变量查找的机制 是先从当前作用域去查找




// 解构赋值
// 把数据从对象，或者数组中解构出来，赋值给其他变量
// 数组的解构赋值，对象的解构赋值，函数参数的解构复杂

// 数组的解构赋值 ，遵循下标一一对应 
// 对象的解构赋值 ，遵循属性名一一对象，和位置没有关系

// 所有的解构赋值都遵循 等号两边数据解构保持一致

let arr = [1,2,3,4,5]
let [a,b,c,d,e] = arr
console.log(a);
console.log(d);
let arr1 = [1,2,[3,4,[5,6]]]
let [,,[,,[f,w]]] = arr1
console.log(f);
console.log(w);
let obj = {
    name:'zs',
    age:18,
    sex:'男',
    list:[1,2,3],
    person:{
        type:'hhhh'
    }
}

let {name,list,person:{type}} = obj
console.log(type);
console.log(name);



let obj1 = {
    name:'李四',
    sing:function(){
        console.log('唱歌');
    }
}

function fn({name,sing}){
  console.log(name);
  sing()
}
fn(obj1)

// setup(props,{emit}){
//   emit()
// }
// actions:{
//     getList({state,commit,dispatch}){
//         commit()
//         state.xx
//         dispatch()
//     }
// }

// 模版字符串 

let names = '张三'
let age = 18
// let message = '我叫'+names+'我今年岁'+age+'岁'
let message = `我叫${names}我今年${age}岁`
console.log(message);







 






    
    
    



</script>
</html>